Friday, January 10, 2025

Lighting Workshop Week 1

I did a third one just for the fun of it, I was really enjoying this.

Thursday, January 9, 2025

Progress on WoW Inspired VFX

 Over the winter break, I've been making progress on a World of Warcraft inspired VFX. I took inspiration from their priest class and have been making an AOE healing spell. 


pls ignore the low video quality :P

I'm gonna break down some chunks of the effect.

For the AOE fx, it's composed of a couple mesh renders, beams, and sprites. I created a disc mesh in Houdini and edited the vertex colors to create a gradient from 0 to 1 to 0 from the edge to the center. For the material, I essentially lerped two noise textures on top of each other for the Emissive color, and created an erosion mask using a Voronoi texture that's controlled using dynamic parameters.

On the edges, I used beams and got them in place using a shape location module with the ring as the shape primitive. They use a similar material to one I'll discuss in the next part of the effect. Lastly, I have two sprite emitters - one for a burst as the AOE spawns, and another of some random hanging particulates.


For the effect that occurs on a player within the AOE, I'm using three beam emitters and one sprite emitter. I made a material for the beams that has two different trails and gave them a bit of distortion and WPO. I made another version of that with a rainbow as a sort of light halo effect, WoW's priest class has very subtle rainbows in their VFX so I wanted to emulate that.

The sprites just briefly float up from where they spawn, but as of now they're not timed and I'll need to work on it further.


There's still two more parts to work on with this effect, both being tied to the player that casts the spell. Once I get a good grasp at all 4 parts, I'll begin fine tuning the effect's look and timing. Working on this was a bit frustrating but rewarding at the same time! It helped me understand UV's more and I have a better foundation for all of the nodes and modules I have available to me in both materials and niagara fx. I also got to work a bit with blueprints too, which was a huge help. Excited to continue working on this!

Monday, December 2, 2024

Medusa Week 15

  •  My focus for this next turn-in, was to solidify the gaze function, add in sounds, and tighten details like volume, attenuation, and timing.
  • To lock in the gaze function, I improved the HUD texture and placement, added a lose state that takes the player back to the start, added another color for Medusa's eyes to be before the player makes eye contact, and add a sound effect to play with it, along with some debugging to make sure the sound doesn't play at unwanted times.
    Adding in the lose state within the player's blueprint

    New texture for the HUD, that appears when the gaze is triggered

    Material for Medusa's eyes, the top section makes her eyes green when not making contact, and the bottom makes her eyes red-orange. The lerp function blends from one to the other using the alpha value from the gaze material function.

    How the new eyes look on Medusa

    Within Medusa's blueprints, I added checks to make sure that the blueprints only start calling for references of her when the player is inside the proper level. This helped prevent errors within the starting area.

    Added some nodes to fade out the stoned SFX once the player looks away.

    A sound cue to produce random snake SFX that I attached to Medusa, that uses attenuation to produce louder sounds as she gets closer to the player.

Thursday, November 14, 2024

Medusa VR Week 12

  •  This week I really started to focus on the post processing effect that I wanted to trigger when the player looks at Medusa. To do this I utilized this tutorial to get me started, and mended it to fit my needs. 
  • I also worked on a HUD display to slowly appear with the post processing effect by linking both of their alpha values together
  • With the effect, I want to add an SFX that sounds like rocks cracking, but during my testing, I realized the way I triggered it made the fx play every tick that the player was looking at Medusa, so the fx played about 5 times a second, and sounded incredibly bass boosted. So, I'll need to continue looking into that next week.
Within the blueprints of the HUD Widget, we get Medusa from her blueprint and set her alpha value to the widget value, 'A'

Create a bind within the widget menu, and link the value, 'A' to the alpha channel

Now within our Medusa blueprints, if 'Should Glow' is true, it triggers a timeline to gradually increase the alpha value to 1, making the post processing effect visible

To link up Medusa's eyes with her animations, set the parent socket to a joint. Braden helped set me up for this by preparing joints located at her eyes.

To create distortion, I used a normal for a stone texture and plugged it into the WorldAlignedTexture node, which spreads it along all surfaces. 

This offsets the normals to add variations in the texture. Afterwards are parameters to control the brightness and desaturation of the effect. Adding the marble node from the previous section just adds a bit more variation.

This controls the color of the effect, and gradually changes based on the distance away from the player.

These nodes control how the effect affects the original colors in the scene. The first time it's added into the effect it blends the colors into it. Then the top nodes helps give us a way to transition the effect from the original scene's colors - when alpha is 0 - to the effect turning on - when alpha is 1. Finally, a desaturation node is used to make the scene monochrome, to make it appear as if everything around you is turning to stone.

This is the overlay I'm using in the HUD, that appears with the post processing effect. I will do another pass on the image to add more details, this is currently being used as a placeholder.

My work logged into Perforce

Thursday, November 7, 2024

Medusa VR Week 11

  •  First I worked on adding some ambiance to the world.
    • I mixed together birds and wind ambiance, fire burning, torch wooshes, and falling stones
    • The birds might have too much of a positive association for the environment we're in, so I may need to look into a different wind ambiance.
    • The fire burning sfx are to match the torches that light up the area
    • The falling stones are representative of the decrepit nature of medusa's temple, fragments of fallen victims chipping off
    • I panned some sfx to the left and others to the right to create a bit of audible depth
      • Hopefully I can replace it with events that will cue sfx to replace the ones in the ambiance

  • Next, I started to work on a material that would become Medusa's eyes.
    • Simply,  a Fresnel function does most of the work, with some vector parameters to set the color, and scalar parameters to control the scaling of the fresnel, the glow amount, and the emissive multiplier.
    • I quite like how creepy it looks! Since the fresnel is made up of annular sections, when placed on a sphere, its appearance remains the same from all angles, creating an illusion of a set of pupils following you
    • I'd love to see if I can mend it to stretch the center to make her eyes appear more snake-like.
Material Function Graph of Glowing Eye Material

Testing Material

Testing Material on a Proxy Medusa
  • Now, while working on the gaze functionality, I've been working with my professor on a new methodology that should hopefully be a bit more optimized.
    • Essentially, I'll be creating two vectors, one from Medusa, and one from the VR camera. We'll take the XYZ values of Medusa's vector and respectively subtract them from the VR camera's vector. Then we'll normalize the vector from the result and the original VR camera vector. Between these two vectors is an angle we'll call Theta. To get theta, we'll take the two normalized vectors and find the DOT product from the two of them. This will create a value between 0 and 1. If the value is close to 1, it means the angle is really small, and you're most likely looking at or close to Medusa. If, say, the angle is greater than 0.9, we'll make that the trigger for Medusa to turn you into stone. 
  • I've also been working on some destruction deformations for our stone head
    • To create this, I first attached an attribute expression node, and left the constant value at (0,0,0) to then add an attribute paint node, which allowed me to paint areas that will be more sensitive to fracturing. From there a scatter node was added, that creates points along the mesh, with points being more condensed in areas I painted in the attribute paint node. Then, I added a Voronoi fracture node, and for the sake of testing, exposed the fragments using an exploded view node.
    • A bit after, I felt that it looked a bit off that all the points stemmed from the outside of the statue, and it seemed a little unrealistic. So to curb that, I appended an iso offset node off of the attribute paint node, and took in the original fbx file. I merged that with the scatter node, and fed that into the Voronoi node. That then allowed me to get some geo clusters inside of the statue head!
    • From there, I added some nodes for UV's and Materials, and appended an RBD bullet solver node, and ending it with a null node that I reference with the RBD to FBX node in the outputs network.
  • Lastly, I got a stone tablet modeled

Here's my work in perforce


Lighting Workshop Week 2